.. _应用案例: ************************************ 应用案例 ************************************ 本章将介绍DS-PAW的各种应用实例,具体包括:如何计算磁矩、如何计算反铁磁材料等;用户通过以下应用教程,将可以更深入了解DS-PAW软件的使用。 .. _2.1 :math:`O` 原子的磁矩计算: :math:`O` 原子的磁矩计算 ========================================================================== ------------------------------------------------------------------------------------------------------------------------------------------------------------------ 本节中我们将以单个氧原子体系为例来介绍磁性体系的计算。 .. _ 2.1.1 :math:`O` 原子自洽计算: :math:`O` 原子自洽计算之文件准备 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 由于本次计算的是单个氧原子的磁矩,因此并不需要进行结构弛豫计算,我们直接从自洽计算开始,准备参数文件 ``scf.in`` 和结构文件 ``structure.as`` , ``scf.in`` 如下: .. code-block:: python task = scf sys.symmetry = false sys.structure = structure.as sys.spin = collinear cal.smearing = 1 cal.sigma = 0.01 cal.kpoints = [1, 1, 1] 本次计算的输入文件中以下几个参数需要重点关注: - ``sys.symmetry`` :本次计算中我们将在关闭对称性的情况下进行计算,因为在DS-PAW中可以通过对称性来减少程序的计算量,但是往往通过对称性优化之后,一些较为细节的东西将会不是特别准确,因此本次计算中将关闭对称性; - ``sys.spin`` :指定体系磁性,因为我们知道单个氧原子的磁矩是 **2μB** ,这里我们将设置体系的磁性为 **collinear** 也就是 **共线自旋** ; - ``cal.kpoints`` :在前面的章节中我们介绍过对于没有周期性的维度, **K点** 可以设置为1; :guilabel:`structure.as` 文件参考如下: .. code:: python Total number of atoms 1 Lattice 7.50000000 0.00000000 0.00000000 0.00000000 8.00000000 0.00000000 0.00000000 0.00000000 8.90000000 Cartesian O 0.00000000 0.00000000 0.00000000 结构文件中我们使用笛卡尔坐标,因此我们设置第七行中坐标类型为 ``Cartesian`` ;为了使结构也尽量的减少对称性,手动晶格改为 **[7.5,8,8.9]** 格子。 .. _ 2.1.2 程序运行: run程序运行 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 准备好输入文件之后,将 ``scf.in`` 和 ``structure.as`` 文件上传到安装了DS-PAW的环境上,运行 :guilabel:`DS-PAW scf.in` 命令。 .. _ 2.1.3 计算结果分析: analysis计算结果分析 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 根据上述的输入文件,计算完成之后将会得到 ``DS-PAW.log`` 、 ``system.json`` 这2个文件。 使用文本编辑器或者在线显示 **json** 格式的网页中打开 ``system.json`` 文件,具体数据如下: .. figure:: images/2-1.png 在 ``system.json`` 的 **Eigenvalue** - **Spin** - **Occupation** 部分可得向上自旋的电子占据数为4,向下自旋的电子占据数为2,同时在 **MagInfo** 部分可得整个体系带有两个 **2μB** 的磁矩。 | | .. _2.2 NiO体系的反铁磁计算: :math:`NiO` 体系的反铁磁计算 ========================================================================== ------------------------------------------------------------------------------------------------------------------------------------------------------------------ 本节中我们将以NiO体系为例介绍如何设置计算反铁磁计算。 .. _ 2.2.1 NiO体系自洽计算: :math:`NiO` 体系自洽计算 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 本次案例中同样省去了结构弛豫这个过程,用户重现此案例时,可以自行尝试下进行结构弛豫计算,准备参数文件 ``scf.in`` 和结构文件 ``structure.as`` , ``scf.in`` 如下: .. code-block:: python task = scf sys.structure = structure.as sys.spin = collinear cal.smearing = 4 cal.kpoints = [8, 8, 8] cal.cutoff = 500 本次计算的输入文件中以下几个参数需要重点关注: - ``cal.smearing`` :本次计算中采用 **四面体加布洛赫** 的方法,当使用该方法时 :guilabel:`sigma` 将强制被设置为 **0** ; - ``sys.spin`` :指定体系磁性, **NiO** 为反铁磁材料因此我们需要设置磁性为 :guilabel:`collinear` 也就是 **共线自旋** ; - ``cal.cutoff`` :这里我们设置计算中平面波的截断为 **500** ; ``structure.as`` 文件参考如下: .. code-block:: python Total number of atoms 4 Lattice 4.16840000 2.08420000 2.08420000 2.08420000 4.16840000 2.08420000 2.08420000 2.08420000 4.16840000 Cartesian Mag Ni 1.04210000 1.04210000 1.04210000 2.0 Ni 5.21050000 5.21050000 5.21050000 -2.0 O 3.12630000 3.12630000 3.12630000 0 O 7.29470000 7.29470000 7.29470000 0 可以注意到,在结构文件的第七行的 ``Cartesian`` 后面加入 **Mag** 标签,设置了这个标签之后就可以设置每个原子的磁矩,由于我们需要体现反铁磁(整个体系不显示磁矩,单个原子有磁矩),我们建立了四个原子的晶胞,一个Ni原子设置磁矩为 **-2** ,另一个Ni原子设置磁矩为 **2** ,两个O原子设置磁矩为 **0** 。 .. note:: 1. **Mag** 标签可设置体系中各原子的磁矩。线性自旋计算中添加每个原子的总磁矩即可;自旋轨道耦合计算中需添加x, y, z方向上的磁矩,添加标签为 **Mag_x** , **Mag_y**, **Mag_z**,在对应的原子坐标后添加三个方向上磁矩即可。以NiO体系为例,若进行自旋轨道耦合计算,磁矩设置应如下: .. code-block:: python Total number of atoms 4 Lattice 4.16840000 2.08420000 2.08420000 2.08420000 4.16840000 2.08420000 2.08420000 2.08420000 4.16840000 Cartesian Mag_x Mag_y Mag_z Ni 1.04210000 1.04210000 1.04210000 0.0 0.0 2.0 Ni 5.21050000 5.21050000 5.21050000 0.0 0.0 -2.0 O 3.12630000 3.12630000 3.12630000 0.0 0.0 0.0 O 7.29470000 7.29470000 7.29470000 0.0 0.0 0.0 .. _ 2.2.2 程序运行: run程序运行 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 准备好输入文件之后,将 ``scf.in`` 和 ``structure.as`` 文件上传到安装了DS-PAW的环境上,运行 :guilabel:`DS-PAW scf.in` 命令。 .. _ 2.2.3 自洽计算结果分析: analysis自洽计算结果分析 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 根据上述的输入文件,计算完成之后将会得到 ``DS-PAW.log`` 、 ``system.json`` 这2个文件。在 ``system.json`` 中的 **MagInfo** 部分可得自洽完成之后总的磁矩为 **1e-08** ,几乎为0。 .. _ 2.2.4 NiO体系态密度计算: :math:`NiO` 体系态密度计算 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 之后准备进行态密度计算,准备参数文件 ``pdos.in`` 结构文件 ``structure.as`` 和自洽的二进制电荷密度文件 ``rho.bin`` ,此时 **pdos.in** 如下: .. code-block:: python task = dos sys.structure = structure.as sys.spin = collinear cal.iniCharge = ./rho.bin cal.smearing = 4 cal.kpoints = [16, 16, 16] cal.cutoff = 500 dos.range = [-10, 10] dos.EfShift = true dos.resolution = 0.05 dos.project = true :guilabel:`pdos.in` 输入参数介绍: - ``dos.range`` :表示能量计算区间为-10到10; - ``dos.EfShift`` :表示能量计算区间是否按照自洽的费米能级平移,此例中dos的能量计算区间会在得到费米能级后进行平移; - ``dos.resolution`` :表示在能量计算区间内打点的间隔精度。此例能量范围为20 eV,间隔精度为0.05,对应打点数为400; - ``dos.project`` :控制态密度的投影计算,本次计算打开了态密度的投影。 .. _ 2.2.5 程序运行: run程序运行 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 将新建的 ``pdos.in`` 文件上传 **NiO** 的自洽文件夹上,运行 :guilabel:`DS-PAW pdos.in` 命令。 .. _ 2.2.6 态密度计算结果分析: dos态密度计算结果分析 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 根据上述的输入文件,计算完成之后将会得到 ``DS-PAW.log`` 、 ``dos.json`` 这2个文件。使用python工具对 ``dos.json`` 进行数据处理画出NiO的t2g和eg轨道,具体操作见辅助工具使用教程,可得不加U得到的态密度图如下所示: .. figure:: images/phase3/NiO-dos.png .. _ 2.2.7 NiO体系DFT+U的态密度计算: :math:`NiO` 体系DFT+U的态密度计算 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ NiO体系DFT+U的态密度计算的计算流程与前面的NiO体系的态密度计算的流程一致,我们只需要在前面的NiO体系的自洽和态密度的计算中都加入DFT+U相关的参数即可: .. code-block:: python #correction related corr.dftu=true corr.dftuElements =[Ni] corr.dftuOrbital=[d] corr.dftuU = [8] corr.dftuJ = [0.95] 本次计算的输入文件中以下几个参数需要重点关注: - ``corr.dftu`` 设置是否打开DFT+U的开关,本例子中设置为true; - ``corr.dftuElements`` 设置需要加U的元素,本例中为Ni; - ``corr.dftuOrbital`` 设置需要加U的轨道,本例中设置为d轨道; - ``corr.dftuU`` 设置具体的U值,本例中设置为8; - ``corr.dftuJ`` 设置具体的J值,本例中设置为0.95; 自洽和态密度计算完成之后,得到DFT+U之后的态密度图如下: .. figure:: images/phase3/NiO-U-dos.png .. note:: 1. **DFT+U可以设置多个元素对应轨道的U值,例如设置Ni的d轨道加U值为8,J值为0.95;O的p轨道加U值为1,J值为0,此时设置如下:corr.dftuElements =[Ni,O] corr.dftuOrbital=[d,p] corr.dftuU = [8,1] corr.dftuJ = [0.95,0]。** | | .. _2.3 Au-Al体系的功函数计算: :math:`AuAl` slab模型功函数计算 ========================================================================== ------------------------------------------------------------------------------------------------------------------------------------------------------------------ 本节中我们将以Au和Al的异质结体系为例介绍如何进行功函数计算。 .. _2.3.1 Au-Al体系的功函数计算: :math:`AuAl` slab模型自洽计算之文件准备 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 本次案例中同样省去了结构弛豫这个过程,用户重现此案例时,可以自行尝试下进行结构弛豫计算,准备参数文件 ``scf.in`` 和结构文件 ``structure.as`` , ``scf.in`` 如下: .. code-block:: python task = scf sys.structure = structure.as sys.spin = collinear cal.smearing = 4 cal.kpoints = [8, 8, 1] cal.cutoff = 400 io.potential=true potential.type = hartree #correction related corr.dipol = true corr.dipolDirection = c 本次计算的输入文件中以下几个参数需要重点关注: - ``io.potential`` 为自洽中计算势函数的开关; - ``potential.type`` 控制势函数保存的类型,计算功函数的时候需要静电势的数据,这里我们设置potential.type = hartree; - ``corr.dipol`` 为偶极修正的开关;本例中设置为true; - ``corr.dipolDirection`` 本例中设置偶极修正的方向为晶格矢量的c方向。 structure.as文件参考如下: .. code-block:: python Total number of atoms 8 Lattice 4.06384898 0.00000000 0.00000000 0.00000000 4.06384898 0.00000000 0.00000000 0.00000000 20.00000000 Cartesian Au 1.01596223 1.01596223 0.00000000 Au 3.04788672 3.04788672 0.00000000 Au 3.04788672 1.01596224 2.03914999 Au 1.01596224 3.04788672 2.03914999 Al 1.01596224 1.01596224 4.07109999 Al 3.04788673 3.04788673 4.07109999 Al 3.04788673 1.01596224 6.09585000 Al 1.01596224 3.04788673 6.09585000 .. _2.3.2 程序运行: run程序运行 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 准备好输入文件之后,将 ``scf.in`` 和 ``structure.as`` 文件上传到安装了DS-PAW的环境上,运行DS-PAW scf.in命令。 .. _2.3.3 功函数数据分析: workfunction功函数数据分析 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 根据上述的输入文件,计算完成之后将会得到 ``DS-PAW.log`` 、 ``system.json`` 、 ``potential.json`` 等多个文件。我们将对 ``potential.json`` 文件进行数据处理既可以得到功函数。 使用 **Device Studio** 可直接对 ``potential.json`` 文件处理出图,其操作步骤为:Simulator-->DS-PAW-->Analysis Plot,选择 ``potential.json`` 即可,可根据作图要求自定义设置面板参数。DS处理得到的势函数曲线如下所示: .. figure:: ../rsts/images/phase2/Au-Al.png 通过势函数的面内平均图,我们可以得到Au和Al的真空电势分别为5.5 ev 和 4.6 eV 从system.json中读取费米能级为 0.113 eV 根据公式 :math:`w = -eϕ - E_{F}` 得到Au和Al构成异质结之后,Au的功函数为 **5.387** eV,Al的功函数为 **4.487** eV。文献参考值[7]:Au的功函数在 **5.10-5.47** eV区间,Al的功函数在 **4.06-4.26** eV区间。